package uy.org.softtech.cssuite.servicios;

import java.util.Set;

import javax.servlet.ServletContext;

import uy.org.softtech.cssuite.entidad.sistema.Tarea;
import uy.org.softtech.cssuite.excepciones.EntidadNoEncontradaException;

/**
 * Interfaz por medio de la cual se acceden a las tareas programadas en la aplicación.
 * 
 * @author fabian.lobo
 */
public interface ServiciosTareas {
	
	/**
	 * Lanza la ejecución de la tarea dada.
	 *
	 * @param instancia - Nombre de la instancia a ejecutar
	 * @param contexto - Contexto de la aplicación
	 * @return true, si la ejecución de la tarea es comenzada correctamente
	 */
	boolean ejecutarTarea(String instancia, ServletContext contexto);

	/**
	 * Retorna el registro de tarea asociado al identificador dado
	 * 
	 * @param id - Identificador de la tarea
	 * @throws EntidadNoEncontradaException si no se encuentra un registro con ese ID
	 * @author fabian.lobo
	 */
	Tarea buscarTarea(Long id) throws EntidadNoEncontradaException;

	/**
	 * Retorna el número de tareas programadas que están actualmente en ejecución
	 * 
	 * @author fabian.lobo
	 */
	Integer tareasEnEjecucion();

	/**
	 * Retorna una lista con informacion de las tareas programadas registradas en la aplicación
	 * 
	 * @author fabian.lobo
	 */
	Set<Tarea> listarTareas();

}
